<?php

/**
 *
 * Основной класс, операции удаления, правки, добовления.
 *
 */
Class FieldsManager extends Model {

	/**
	 * Иниицализация класса.
	 */
	function __construct() {

		parent::Model();
	}


	/**
	 * @param $field_object
	 * @return boolean
	 */
	function add($field_object)
	{
		// Коллекция
		$data = array();

		// Передаём значения из объекта $field_object
		$data = array(
            'name'   => $field_object->name,
            'title' => $field_object->title
		);

		// Добавляем поле
		$this->db->insert('fields', $data);
		// Успешно ли выполнена операция
		return true;
	}

	/**
	 * @param $field_object
	 * @return boolean
	 */
	function edit($field_object)
	{
		// code here...
		return $result;
	}

	/**
	 * @param $id
	 * @return boolean
	 */
	function delete($id)
	{
		// code here...
		return $result;
	}

	/**
	 * @return unknown_type
	 */
	function get()
	{
		// code here...
	}
}


/**
 *  Типы полей. Используется для добавления типов, удаления.
 *
 */
Class FieldsTypeManager {

	/**
	 * Иниицализация класса.
	 */
	function __construct() {

		parent::Model();
	}

	function add($type_object)
	{
		// code here...
	}

	function edit($type_object)
	{
		// code here...
	}

	/**
	 * @param $id
	 * @return bool
	 */
	function delete($id)
	{
		// code here...
		return $result;
	}
}

/**
 *
 * Объект - поле, используется при создании нового поля.
 *
 */
Class FieldObject {

	// Название поля (машинный вид).
	private $name;

	// Название поля, заданное пользователем (для работы, в панели администратора).
	private $title;

	// Тип поля (объект класса FieldsType).
	private $id_type_object;
	
	// Уникальный идентификатор типа материала
	private $id_type_material;

	// Уникальный идентификатор модуля, который работает с этим полем.
	private $id_module;

	// Только для чтения? Будет использоватся, как мне кажется, для системных записей.
	private $is_read;

	// Для какой группы, будет доступно это поле.
	private $acl_object;

	/**
	 * Иниицализация класса
	 */
	function __construct()
	{

		//parent::Model();
	}


	/**
	 * Считывание значение из свойства
	 * @param string $name Название свойства
	 */
	function __get($name)
	{
		return (isset($this->$name)) ? $this->$name : false;
	}

	/**
	 * @param string $name Название свойства
	 * @param string $value Значение которое присваеваем свойству
	 * @return bool $result Успешно ли выполнена операция
	 */
	function __set($name, $value)
	{
		$this->$name = $value;
	}

}

/**
 *
 * Объект - поле, используется при создании нового типа поля.
 *
 */
Class FieldTypeObject {

	// Название типа (машинный вид).
	private $name;

	// Название типа, заданное пользователем (для работы, в панели администратора).
	private $title;

	// Название типа.
	private $type;

	/**
	 * Иниицализация класса.
	 */
	function __construct() {

		parent::Model();
	}

	/**
	 * Считывание значение из свойства
	 * @param string $name Название свойства
	 */
	function __get($name)
	{
		return (isset($this->$name)) ? $this->$name : false;
	}

	/**
	 * @param string $name Название свойства
	 * @param string $value Значение которое присваеваем свойству
	 * @return bool $result Успешно ли выполнена операция
	 */
	function __set($name, $value)
	{
		$this->$name = $value;
	}
}